package com.ctshk.rpc.air.service;

import com.ctshk.common.dto.Result;
import com.ctshk.common.model.PageResponse;
import com.ctshk.common.model.TokenUser;
import com.ctshk.rpc.air.dto.*;
import com.ctshk.rpc.air.dto.ticketop.AirBookingTicketTypeOpDTO;
import com.ctshk.rpc.air.req.*;

import java.util.List;

/**
 * <p>
 * 机票产品 服务类
 * </p>
 *
 * @author lihang
 * @since 2021-03-05
 */
public interface IAirProductService{


    /**
     * 新增手动机票产品
     * @param req
     * @param tokenUser
     * @return
     */
    Result  add(AirProductDataReq req, TokenUser tokenUser);


    /**
     * 机票产品详情
     * @param id
     * @return
     */
    Result<AirProductInfoDTO>  info(Long id);

    /**
     * 机票产品详情
     * @param req
     * @return
     */
    Result<AirProductInfoDTO> info(AirStrategyDayInfoReq req);

    /**
     * 修改机票产品详情,审批状态中的机票产品不允许修改任何信息
     * @param req
     * @param tokenUser
     * @return
     */
    Result edit(AirProductDataReq req,TokenUser tokenUser);

    /**
     * 批量设置机票API
     * @param airProductApiReqList
     * @param tokenUser
     * @return
     */
    Result editSetapi(List<AirProductApiReq> airProductApiReqList,TokenUser tokenUser);

    /**
     * 修改机票产品状态  售卖状态  审批状态
     * @param req
     * @param tokenUser
     * @return
     */
    Result editStatus(AirProductStatusReq req, TokenUser tokenUser);

    /**
     * 机票产品列表
     * @param req
     * @return
     */
    Result<PageResponse<AirProductListDTO>> list(AirProductListReq req);


    /**
     * 手动机票产品上架设置
     * @param req
     * @param currentUser
     * @return
     */
    Result updateStrategy(AirProductSaleStrategyUpdateReq req, TokenUser currentUser);

    /**
     * 查询机票产品上架策略详情
     * @param id
     * @return
     */
    Result<AirProductSaleStrategyDTO> queryStrategy(Long id);


    /**
     * 機票推薦列表
     * @param req
     * @return
     */
    Result<PageResponse<AirRecommendListDTO>> recommendList(AirProductRecommendListReq req,TokenUser tokenUser);


    /***
     * 查詢預訂機票類型 前端写死 暂时注释
     * @return
     */
    //Result<List<AirBookingTicketTypeDTO>>  queryTicketType();


    Result<List<AirBookingListDTO>> queryBookingList(AirBookingListReq req,TokenUser tokenUser);


    Result<List<AirBookingTicketTypeOpDTO>> queryTicketOp();


    List<AirProductDTO> queryProductList(List<Long> productIds);


    /**
     * 获取产品列表 (内部接口)
     * @To 运营中心
     * @param req
     * @return
     */
    Result<PageResponse<OperationsCenterGetProductListDTO>> operationsCenterGetProductList(AirProductOperationsCenterListReq req);

    /**
     * 通过产品ids获取产品信息
     * @To 运营中心
     * @param productIds 产品id列表
     * @return
     */
    Result<List<OperationsCenterGetProductListDTO>> operationsCenterGetProductByIds(List<Long> productIds);

    /**
     * 审批产品
     * @param req
     * @param currentUser
     * @return
     */
    Result productExamine(AirProductExamineReq req, TokenUser currentUser);

    /**
     * 通过id获取
     * @param productId
     */
    AirProductInfoDTO getById(Long productId);
}
